package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.budget.RCBudget;
import com.shrct.businessprocess.diagnose.IDiagnoseAcceptor;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.RCBasePurchaseOrder;
import com.shrct.businessprocess.purchase.RCServiceProductPurchaseRequest;
import com.shrct.businessprocess.purchase.RCServicePurchaseOrderAccept;
import com.shrct.businessprocess.purchase.RCServicePurchaseOrderStatus;
import com.shrct.businessprocess.purchase.impl.RCServicePurchaseOrderImpl;
import com.shrct.businessprocess.purchase.proxy.RCServicePurchaseOrderProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCServicePurchaseOrderImpl.class)
public interface RCServicePurchaseOrder extends RCBasePurchaseOrder {
  public abstract RCServiceProductPurchaseRequest getPurchaseRequest();
  
  public abstract RCServicePurchaseOrder setPurchaseRequest(final RCServiceProductPurchaseRequest purchaseRequest);
  
  public abstract RCProjectMoney getAmount();
  
  public abstract RCServicePurchaseOrder setAmount(final RCProjectMoney amount);
  
  public abstract String getComment();
  
  public abstract RCServicePurchaseOrder setComment(final String comment);
  
  public abstract Collection<RCServicePurchaseOrderAccept> getAcceptItems();
  
  public abstract RCServicePurchaseOrderAccept createAndAddtoAcceptItems();
  
  public abstract RCServicePurchaseOrderAccept createAndAddtoAcceptItems(final Procedure1<RCServicePurchaseOrderAccept> updater);
  
  public abstract RCServicePurchaseOrder removeFromAcceptItems(final RCServicePurchaseOrderAccept rCServicePurchaseOrderAccept);
  
  public abstract RCServicePurchaseOrder removeAllAcceptItems();
  
  public abstract RCBudget getBudget();
  
  public abstract void diagnose(final IDiagnoseAcceptor acceptor);
  
  /**
   * 订单总金额
   */
  public abstract RCProjectMoney getTotalCost();
  
  public abstract RCServicePurchaseOrderAccept createAccept(final Procedure1<? super RCServicePurchaseOrderAccept> preInit);
  
  public abstract RCProjectMoney getTotalAcceptItemsAmount();
  
  public abstract RCServicePurchaseOrderStatus getStatus();
  
  public abstract void start();
  
  public abstract void startAudit();
  
  public abstract void auditPassed();
  
  public abstract void auditCanceled();
  
  public abstract void invoiceRegister();
  
  public abstract void payRequest();
  
  public abstract void close();
  
  public abstract void postCancel();
  
  public abstract void cancelClose();
  
  public abstract Boolean isCraeted();
  
  public abstract Boolean isAuditing();
  
  public abstract Boolean isExecuting();
  
  public abstract Boolean isClosed();
  
  public abstract Boolean isCanceled();
  
  public abstract RCServicePurchaseOrderProxy toProxy();
}
